//package com.example.androidexample.listview;
//
//import android.animation.ValueAnimator;
//import android.content.Context;
//import android.util.AttributeSet;
//import android.util.Log;
//import android.view.MotionEvent;
//import android.view.View;
//import android.widget.AbsListView;
//import android.widget.ImageView;
//import android.widget.ListView;
//import android.widget.ProgressBar;
//import android.widget.TextView;
//
//import com.example.androidexample.R;
//
//import java.text.SimpleDateFormat;
//import java.util.Date;
//
//public class RefreshListView extends ListView implements AbsListView.OnScrollListener {
//
//    //头View中的一些组件
//    private View mHearder;
//    private TextView refresh_tips;   //显示文字（刷新状态）
//    private TextView refresh_last_time;   //显示时间（刷新完成）
//    private ImageView ivArrow;   //指向图
//    private ProgressBar pbWaiting;   //刷新的圈圈
//    private int mHeaderHeight;   //头View的测量高度
//
//    //脚View中的一些组件
//    private View mFooterView;
//    private TextView tv_pull_list_header_title;   //显示文字（加载状态）
//    private ProgressBar pb_pull_list_header;    //刷新的圈圈
//    private int mFooterViewHeight;   //脚View的测量高度
//
//    private int startY = -1;   //按下时的Y坐标（相对于屏幕的绝对坐标）
//    private LoadState mCurrrentState = LoadState.STATE_PULL_REFRESH;
//    private int endY;
//    private int moveY;
//    private ValueAnimator valueAnimator;
//    private int padding = 0;
//
//    private int lastEndY = 0;
//
//    public RefreshListView(Context context) {
//        super(context);
//        initHeaderView();
//        initFooterView();
//        initArrowAnim();
//    }
//
//    public RefreshListView(Context context, AttributeSet attrs) {
//        super(context, attrs);
//        initHeaderView();
//        initFooterView();
//        initArrowAnim();
//    }
//
//    public RefreshListView(Context context, AttributeSet attrs, int defStyleAttr) {
//        super(context, attrs, defStyleAttr);
//        initHeaderView();
//        initFooterView();
//        initArrowAnim();
//    }
//
//
//    private void initFooterView() {
//        this.setOnScrollListener(this);
//        mFooterView = View.inflate(getContext(), R.layout.refresh_listview_footer, null);
//        this.addFooterView(mFooterView);
//        tv_pull_list_header_title = mFooterView.findViewById(R.id.tv_pull_list_header_title);
//        pb_pull_list_header = mFooterView.findViewById(R.id.pb_pull_list_header);
//        mFooterView.measure(0,0);
//        mFooterViewHeight = mFooterView.getMeasuredHeight();
//        mFooterView.setPadding(0,0,0,0-mFooterViewHeight);
//    }
//
//    private void initHeaderView() {
//        mHearder = View.inflate(getContext(), R.layout.refresh_listview_header, null);
//        this.addHeaderView(mHearder);
//        refresh_tips = mHearder.findViewById(R.id.refresh_tips);
//        refresh_last_time = mHearder.findViewById(R.id.refresh_last_time);
//        ivArrow = mHearder.findViewById(R.id.ivArrow);
//        pbWaiting = mHearder.findViewById(R.id.pbWaiting);
//        mHearder.measure(0,0);
//        mHeaderHeight = mHearder.getMeasuredHeight();
//        mHearder.setPadding(0, 0-mHeaderHeight,0,0);
//    }
//
//    private void initArrowAnim() {
//        valueAnimator = ValueAnimator.ofInt(0, 0);
//    }
//
//    @Override
//    public boolean onTouchEvent(MotionEvent ev) {
//        switch (ev.getAction())
//        {
//            case MotionEvent.ACTION_DOWN:
//            {
//                if (valueAnimator.isRunning())
//                    valueAnimator.end();
//                startY = (int) ev.getY();
//                Log.e("SayHallo","MotionEvent.ACTION_DOWN startY = " + startY);
//            }
//            break;
//            case MotionEvent.ACTION_MOVE:
//            {
//                Log.e("SayHallo","MotionEvent.ACTION_MOVE");
//                if (startY == -1) {// 确保startY有效
//                    startY = (int) ev.getY();
//                }
//
//                if(mCurrrentState == LoadState.STATE_REFRESHING) break;
//
//                endY = (int) ev.getY();
//                moveY = px2dp(endY - startY,getContext());
//
//                if( moveY > 0 && getFirstVisiblePosition() == 0){
//                    // 计算padding
//                    padding = moveY-mHeaderHeight;
//                    if(padding < 1)  //预留位置
//                        mHearder.setPadding(0,padding,0,0);
//
//                    if (padding > 0 && mCurrrentState != LoadState.STATE_RELEASE_REFRESH )
//                    {
//                        mCurrrentState = LoadState.STATE_RELEASE_REFRESH;
//                        refreshState();
//                    }else if (padding < 0 && mCurrrentState != LoadState.STATE_PULL_REFRESH) {// 改为下拉刷新状态
//                        mCurrrentState = LoadState.STATE_PULL_REFRESH;
//                        refreshState();
//                    }
//                    return true;
//                }
//
//
//            }
//            break;
//            case MotionEvent.ACTION_UP:
//            {
//                Log.e("SayHallo","padding = " + padding);
//                if (mCurrrentState == LoadState.STATE_RELEASE_REFRESH)
//                {
//
//                    mCurrrentState = LoadState.STATE_REFRESHING;
//                    mHearder.setPadding(0,0,0,0);
//                    refreshState();
//                }else if (mCurrrentState == LoadState.STATE_PULL_REFRESH){
//                    if (padding != 0)
//                        scroll_Start(padding);
//                }
//
//                startY = -1;   //重置
//                padding = 0;
//
//            }
//            break;
//            default:
//                break;
//        }
//        return super.onTouchEvent(ev);
//    }
//
//    //px转化为dp
//    public static int px2dp(float pxValue, Context activity) {
//        final float scale = activity.getResources().getDisplayMetrics().density;
//        return (int) ((pxValue - 0.5f) / scale);
//    }
//
//    /**
//     * 刷新下拉控件的布局
//     */
//    private void refreshState() {
//        switch (mCurrrentState) {
//            case STATE_PULL_REFRESH:
//                refresh_tips.setText("下拉刷新");
//                ivArrow.setVisibility(View.VISIBLE);
//                pbWaiting.setVisibility(View.INVISIBLE);
////                ivArrow.startAnimation(animDown);
//                break;
//            case STATE_RELEASE_REFRESH:
//                refresh_tips.setText("松开刷新");
//                ivArrow.setVisibility(View.VISIBLE);
//                pbWaiting.setVisibility(View.INVISIBLE);
////                ivArrow.startAnimation(animUp);
//                break;
//            case STATE_REFRESHING:
//                refresh_tips.setText("正在刷新...");
//                ivArrow.clearAnimation();// 必须先清除动画,才能隐藏
//                ivArrow.setVisibility(View.INVISIBLE);
//                pbWaiting.setVisibility(View.VISIBLE);
//
//                if (mListener != null) {
//                    mListener.onRefresh();
//                }
//                break;
//
//            default:
//                break;
//        }
//    }
//
//    OnRefreshListener mListener;
//    private boolean isLoadingMore;
//
//    @Override
//    public void onScrollStateChanged(AbsListView view, int scrollState) {
//        Log.e("SayHallo","到底了.....");
//        if (scrollState == OnScrollListener.SCROLL_STATE_IDLE
//                || scrollState == OnScrollListener.SCROLL_STATE_FLING) {
//
//            if (getLastVisiblePosition() == getCount() - 1 && !isLoadingMore) {// 滑动到最后
//                Log.e("SayHallo","到底了.....");
////                mFooterView.setPadding(0, 0, 0, 0);// 显示
//                setSelection(getCount() - 1);// 改变listview显示位置
//
//                isLoadingMore = true;
//
//                if (mListener != null) {
//                    mListener.onLoadMore();
//                }
//            }
//        }
//    }
//
//    @Override
//    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
//
//    }
//
//
//    public interface OnRefreshListener {
//        void onRefresh();
//        void onLoadMore();// 加载下一页数据
//    }
//
//    public void setOnRefreshListener(OnRefreshListener listener) {
//        mListener = listener;
//    }
//
//    /*
//     * 收起下拉刷新的控件
//     */
//    public void onRefreshComplete(boolean success) {
//        if (isLoadingMore) {// 正在加载更多...
//            mFooterView.setPadding(0, -mFooterViewHeight, 0, 0);// 隐藏脚布局
//            isLoadingMore = false;
//        } else {
//            mCurrrentState = LoadState.STATE_PULL_REFRESH;
//
//            ivArrow.setVisibility(View.VISIBLE);
//            pbWaiting.setVisibility(View.INVISIBLE);
//
//            scroll_Start(1);
////            mHearder.setPadding(0, -mHeaderViewHeight, 0, 0);// 隐藏
//
//            if (success) {
//                refresh_tips.setText("刷新成功");
//                refresh_last_time.setText("最后刷新时间:" + getCurrentTime());
//            }
//        }
//    }
//
//    /**
//     * 获取当前时间
//     */
//    public String getCurrentTime() {
//        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//        return format.format(new Date());
//    }
//
//    private void scroll_Start(int p) {
//
//        valueAnimator.setIntValues(p,-mHeaderHeight);
//        valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
//            @Override
//            public void onAnimationUpdate(ValueAnimator animation) {
//                int value = (int) animation.getAnimatedValue();
//
//                mHearder.setPadding(0,value,0,0);
//            }
//        });
//        valueAnimator.setDuration(500);
//        valueAnimator.start();
//    }
//
//    enum LoadState {
//        STATE_PULL_REFRESH,     // 下拉刷新
//        STATE_RELEASE_REFRESH ,     // 松开刷新
//        STATE_REFRESHING        //正在刷新
//    }
//}